In many conventional applications, optically readable codes are imprinted on components to convey information to optical sensors or other such scanning devices. Bar codes, such as the universal product code (UPC), are one type of optically readable code that is often printed on consumer articles for scanning past an optical sensor. The optical sensor typically decodes information from the code imprinted on a consumer article, subsequent to which the decoded information may be routed to further processing equipment. A bar code printed on an item in a grocery store, for instance, may be scanned past an optical sensor to decode price information included in the bar code. Thereafter, the price information is automatically transmitted to a cash register, which typically prints the price information on a customer receipt, thereby saving time by eliminating the need for manual price entry on the cash register keyboard. Bar codes, however, are usually rather large and, as a result, may be unsuitable for use with smaller products, such as miniature paging receivers, that have a minimum of available space. Additionally, because information in bar codes is represented by uniform bars of various widths, bar codes are often difficult to print on non-paper surfaces, such as metals or plastics, that have rough or uneven surfaces. Therefore, bar codes printed on such surfaces may be illegible to optical scanning devices, possibly resulting in the erroneous decoding of information.
Another example of coded information is an optically readable matrix, formed as a "checker board" symbol that represents information in the form of black and white squares. Typically, the information is coded in a binary code, wherein 0's are represented by squares of one color and 1's are represented by squares of another color. The binary code matrix possesses several advantages over the conventional bar code. For example, the binary code matrix may be more easily decoded when printed on a rough or uneven surface since irregularities do not affect the interpretation of the information as long as the color of the square can be determined. Additionally, the size of the binary code matrix may be adjusted, by decreasing or increasing the size of the squares, depending on the space available in which to print the matrix.
Conventionally, however, a portion of the available space for the binary code matrix is utilized to distinguish the binary code matrix from the surrounding area. For example, one typical binary code matrix employs a "quiet zone", i.e., an area around the perimeter of the binary code matrix in which no further information can be located. An optical scanning device searches for this quiet zone to locate the binary code matrix. Another type of binary code matrix is recognized by an optical scanning device when two or more rows of solid black squares along the perimeter of the binary code matrix are located. As a result, a relatively large amount of space, which otherwise might be used to convey additional information, is wasted in differentiating the binary code matrix from the surrounding area.
Although the conventional binary code matrix is inherently more accurate than the bar code, errors may nevertheless occur in decoding the included information. Such errors most commonly occur when a square is mistaken for the opposite color or is incorrectly colored and, as a result, the information is decoded erroneously. As a safeguard against decoding errors, some typical binary code matrices include identical information in two or more different locations within the binary code matrix. In this case, however, the optical scanning device which decodes the information has no method of detecting which is the correct information if the information in one location differs from the information in the other location. Furthermore, the duplication of information contained in the binary code matrix may almost double the size of the matrix, thereby wasting space which is often already at a premium.
Thus, what is needed s an optically readable binary code matrix that maximizes space usage. The binary code matrix should also utilize a minimal number of squares to distinguish the binary code matrix from the surrounding area. Furthermore, the binary code matrix should include data by which errors in decoded information may be detected and corrected.